modifikacia binarnych DFM

Otázka od: Lubos Urban

9. 12. 2002 17:19

Cafte

Mam taky problem s binarnimi delphi *.dfm subormi a sice:
moja aplikacia ma robit nieco take ze jej dam hociaky binarny *.dfm subor z
delphi 5 ktory ma otvorit zmeni hodnoty nejakych properties a zase ho ulozit
v binarnom formate (ma to byt nieco ako editor binarnych dfm suborov).
Pricom ide o modifikaciu foriem ktore nie su sucastou aplikacie.
Skusal som uz vsetko mozne TReader, TStream.ReadComponent ani s jednym sa mi
nepodarilo nacitat formu (chyby typu Invalid stream format, Invadid property
value atd.. )
Vsetky priklady ktore som nasiel nacitavali iba formy alebo objekty ktore
boli sucastou aplikacie, ale nie nejake formy ktore nie su sucastou
aplikacie a jedine co viem ze su potomkami TForm.

Ak by som vas mohol poprosit o nejaky kratucky example ako to spravit, velmi
by mi to pomohlo, lebo uz naozaj beviem ako dalej.

W2k, D5. Ent.


s pozdravom Lubor Urban


Odpovedá: Danik Frantik

10. 12. 2002 9:31

A neslo by pomoci convert.exe (Delphi\Bin\Convert.exe) prevest na textovy
tvar, pak to zmenit a potom zase vratit do binarniho formatu?

Jinak nevim jak vy, ale ja binarni format NIKDY nepouzivam. (Je uspornejsi,
ale spatne se verzuje ve FreeVCS  

Danik

-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz]On
Behalf Of Lubos Urban
Cafte

moja aplikacia ma robit nieco take ze jej dam hociaky binarny *.dfm subor z
delphi 5 ktory ma otvorit zmeni hodnoty nejakych properties a zase ho ulozit
v binarnom formate (ma to byt nieco ako editor binarnych dfm suborov).
Pricom ide o modifikaciu foriem ktore nie su sucastou aplikacie.

s pozdravom Lubor Urban


Odpovedá: Lauko Stefan

10. 12. 2002 11:53

Ahoj,
tvoj problem vyriesi tento kod... Prisposobit pre tvoje potreby si to musis
sam.
(je to skopirovane z helpu)


function ComponentToString(Component: TComponent): string;

var
  BinStream:TMemoryStream;
  StrStream: TStringStream;
  s: string;
begin
  BinStream := TMemoryStream.Create;
  try
    StrStream := TStringStream.Create(s);
    try
      BinStream.WriteComponent(Component);
      BinStream.Seek(0, soFromBeginning);
      ObjectBinaryToText(BinStream, StrStream);
      StrStream.Seek(0, soFromBeginning);
      Result:= StrStream.DataString;
    finally
      StrStream.Free;

    end;
  finally
    BinStream.Free
  end;
end;

function StringToComponent(Value: string): TComponent;
var
  StrStream:TStringStream;
  BinStream: TMemoryStream;
begin
  StrStream := TStringStream.Create(Value);
  try
    BinStream := TMemoryStream.Create;
    try
      ObjectTextToBinary(StrStream, BinStream);
      BinStream.Seek(0, soFromBeginning);
      Result := BinStream.ReadComponent(nil);

    finally
      BinStream.Free;
    end;
  finally
    StrStream.Free;
  end;
end;

Lauko.


----- Original Message -----
From: "Lubos Urban" <Lubos.Urban@visicom.sk>
Sent: Monday, December 09, 2002 4:51 PM

> Mam taky problem s binarnimi delphi *.dfm subormi a sice:
> moja aplikacia ma robit nieco take ze jej dam hociaky binarny *.dfm subor
z
> delphi 5 ktory ma otvorit zmeni hodnoty nejakych properties a zase ho
ulozit
> v binarnom formate (ma to byt nieco ako editor binarnych dfm suborov).
> Pricom ide o modifikaciu foriem ktore nie su sucastou aplikacie.
> Skusal som uz vsetko mozne TReader, TStream.ReadComponent ani s jednym sa
mi
> nepodarilo nacitat formu (chyby typu Invalid stream format, Invadid
property
> value atd.. )
> Vsetky priklady ktore som nasiel nacitavali iba formy alebo objekty ktore
> boli sucastou aplikacie, ale nie nejake formy ktore nie su sucastou
> aplikacie a jedine co viem ze su potomkami TForm.
>
> Ak by som vas mohol poprosit o nejaky kratucky example ako to spravit,
velmi
> by mi to pomohlo, lebo uz naozaj beviem ako dalej.

Odpovedá: Lubos Urban

10. 12. 2002 12:42

O tomto sposobe prevodu binarnych DFM na textove DFM viem, ale myslim ze
existuje aj taky pristup ze nacitas tu formu z binarneho DFM priamo a ono ti
ju aj vytvoti a potom len cez vlastnost Controls prisatupujes k jednotlivym
komponentam, a tym jednoducho menis ich properties .

Nevyhodou textovej formy popisu *.dfm je to ze potrebujem parser ktory mi
spravne sparsuje toto textove DFM a vytvori stromovu strukturu komponent,
preto sa mi to zdalo spravit horeuvedenym sposobom jednoduchsie.  

Inak jeden taky parser som nasiel v tej utilitke na stranke Quick Reportu
(Dakujem Petrovi  a teraz ho prave upravujem pre svoje potreby.


----- Original Message -----
From: "Lauko Stefan" <laukosw@naex.sk>
To: <delphi-l@clexpert.cz>
Sent: Tuesday, December 10, 2002 11:15 AM
Subject: Re: modifikacia binarnych DFM


> Ahoj,
> tvoj problem vyriesi tento kod... Prisposobit pre tvoje potreby si to
musis
> sam.
> (je to skopirovane z helpu)
>
>
> function ComponentToString(Component: TComponent): string;
>
> var
> BinStream:TMemoryStream;
> StrStream: TStringStream;
> s: string;
> begin
> BinStream := TMemoryStream.Create;
> try
> StrStream := TStringStream.Create(s);
> try
> BinStream.WriteComponent(Component);
> BinStream.Seek(0, soFromBeginning);
> ObjectBinaryToText(BinStream, StrStream);
> StrStream.Seek(0, soFromBeginning);
> Result:= StrStream.DataString;
> finally
> StrStream.Free;
>
> end;
> finally
> BinStream.Free
> end;
> end;
>
> function StringToComponent(Value: string): TComponent;
> var
> StrStream:TStringStream;
> BinStream: TMemoryStream;
> begin
> StrStream := TStringStream.Create(Value);
> try
> BinStream := TMemoryStream.Create;
> try
> ObjectTextToBinary(StrStream, BinStream);
> BinStream.Seek(0, soFromBeginning);
> Result := BinStream.ReadComponent(nil);
>
> finally
> BinStream.Free;
> end;
> finally
> StrStream.Free;
> end;
> end;
>
> Lauko.
>
>
> ----- Original Message -----
> From: "Lubos Urban" <Lubos.Urban@visicom.sk>
> Sent: Monday, December 09, 2002 4:51 PM
>
> > Mam taky problem s binarnimi delphi *.dfm subormi a sice:
> > moja aplikacia ma robit nieco take ze jej dam hociaky binarny *.dfm
subor
> z
> > delphi 5 ktory ma otvorit zmeni hodnoty nejakych properties a zase ho
> ulozit
> > v binarnom formate (ma to byt nieco ako editor binarnych dfm suborov).
> > Pricom ide o modifikaciu foriem ktore nie su sucastou aplikacie.
> > Skusal som uz vsetko mozne TReader, TStream.ReadComponent ani s jednym
sa
> mi
> > nepodarilo nacitat formu (chyby typu Invalid stream format, Invadid
> property
> > value atd.. )
> > Vsetky priklady ktore som nasiel nacitavali iba formy alebo objekty
ktore
> > boli sucastou aplikacie, ale nie nejake formy ktore nie su sucastou
> > aplikacie a jedine co viem ze su potomkami TForm.
> >
> > Ak by som vas mohol poprosit o nejaky kratucky example ako to spravit,
> velmi
> > by mi to pomohlo, lebo uz naozaj beviem ako dalej.
>
>
>
>
>
>

Odpovedá: Petr Slaby

10. 12. 2002 9:52

Ahoj,

na strankach vyrobcu QuickReportu je ke stazeni utilitka (i se
zdrojaky), ktera prevadi sestavy z QR 1.0 do QR 3.x a automaticky
prevadi bianarni format DFM na textovy, provede konverzi a zase
prevede DFM na binarni format.

Petr

Tuesday, December 10, 2002, 9:04:04 AM, you wrote:

DF> A neslo by pomoci convert.exe (Delphi\Bin\Convert.exe) prevest na textovy
DF> tvar, pak to zmenit a potom zase vratit do binarniho formatu?

DF> Jinak nevim jak vy, ale ja binarni format NIKDY nepouzivam. (Je uspornejsi,
DF> ale spatne se verzuje ve FreeVCS  

DF> Danik

DF> -----Original Message-----
DF> From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz]On
DF> Behalf Of Lubos Urban
DF> Cafte

DF> moja aplikacia ma robit nieco take ze jej dam hociaky binarny *.dfm subor z
DF> delphi 5 ktory ma otvorit zmeni hodnoty nejakych properties a zase ho
ulozit
DF> v binarnom formate (ma to byt nieco ako editor binarnych dfm suborov).
DF> Pricom ide o modifikaciu foriem ktore nie su sucastou aplikacie.

DF> s pozdravom Lubor Urban